// import {
//     API
// } from "../../../utils/fireapi";
import {
    Utils
} from "../../../utils/util";
// 小程序配置信息
const app = getApp();
Page({
    data: {
        // 界面定制化的配置参数
        // pageSet: app.globalData.settings.camera,
        // 前置摄像头或后置摄像头,true:前置摄像头,false:后置摄像头
        cameraPosition: true,
        // 闪光灯开关,true:开,false:关
        flashLight: false,
        // 显示或隐藏选择的证件照尺寸明细(如只显示"一寸",还是显示一寸照片的详细信息)
        showPhotoSizeDetail: true,
        // 所有证件照尺寸类型,每个类型包含所有该类型的证件照尺寸 
        categorys: [], //[]
        // 常用证件照尺寸
        commonSizes: [], //[]
        // 选中的制作证件照尺寸
        selectedPhotoSize: undefined, //{}
        // 待制作为证件照的原始图片(从相册选择或相机拍摄)
        sourceImg: "",
        // 显示或隐藏所有证件照尺寸界面
        showSizesModal: false,
        // 在显示尺寸明细时,证件照的尺寸内容(对原数据进行了格式处理)
        disSize: "",
        // 在显示尺寸明细时,证件照的像素内容(对原数据进行了格式处理)
        disPixel: "",
        // 当用手机相机获取制作证件照图片时,显示拍摄的照片
        showCameraImg: false,
        // 显示更多类型选择窗口
        // camera高度
        contentHeight: 0,
        // 底部按钮栏高度
        footerBarHeight: 138,
        //
        isShowSizeDetial: false

    },
    /**调转前置和后置摄像头 */
    rotateCamera() {
        this.setData({
            cameraPosition: !this.data.cameraPosition
        })
    },

    /*开启或关闭闪光等 */
    openFlashlight() {
        this.setData({
            flashLight: !this.data.flashLight,
        })
    },

    /**选择证件照尺寸后触发,显示选中的尺寸明细内容 */
    choosePhotoSize(event) {
        // 获取选中的尺寸
        let item = event.target.dataset.item;
        let disSize = this.getDisSize(item);
        let disPixel = this.getDisPixel(item);
        this.setData({
            selectedPhotoSize: item,
            // showSizesModal: false,
            disSize: disSize,
            disPixel: disPixel

        })
    },
    /**格式选中尺寸宽度和高度内容,便于明细内容中显示 */
    getDisSize(size) {
        let width = Math.trunc(size.width);
        let height = Math.trunc(size.height);
        return width.toString() + "x" + height.toString() + "mm";
    },
    /**格式选中尺寸像素内容,便于明细内容中显示 */
    getDisPixel(size) {
        // 根据dpi计算像素数量
        let widthPixel = Utils.getPixel(
            size.width,
            size.dpi
        );
        let heightPixel = Utils.getPixel(
            size.height,
            size.dpi
        );
        return widthPixel.toString() + "x" + heightPixel.toString();
    },

    /*绑定证件照尺寸明细的展开和关闭的点击事件 */
    openSizeDetail() {
        this.setData({
            showPhotoSizeDetail: !this.data.showPhotoSizeDetail
        })
    },

    /** 调用API从后端获取所有证件照尺寸类型,包括类型下的证件照尺寸 */
    loadSizeType() {
        const categorys = app.globalData.serverData.categorys
        
        let commonSizeList = []; // 常用证件照
        categorys.forEach((sizetype) => {
            let photos = sizetype.photos;
            // 过滤出所有常用的证件照尺寸(is_common字段)
            let temp = photos.filter((item) => item.is_common == true);
            commonSizeList.push(...temp);
            // 按照尺寸id升序排序
            commonSizeList.sort(function (a, b) {
                return a.id - b.id;
            });
            
            // 过滤掉非证件照尺寸
            let idphotos = photos.filter((item) => item.is_idphoto == true);
            sizetype.photos = idphotos
        });
        // 过滤掉不包含尺寸的类型
        let newCat = categorys.filter((item)=>item.photos.length>0)
        
        // 如果能够取到证件照尺寸,则设置第一个尺寸为默认选中的证件照尺寸
        if (commonSizeList.length) {
            this.setData({
                categorys: newCat,
                commonSizes: commonSizeList.slice(0, 4), // 只取前4个common证件照尺寸
                selectedPhotoSize: commonSizeList[0],
                disSize: this.getDisSize(commonSizeList[0]),
                disPixel: this.getDisPixel(commonSizeList[0])
            })
        }
    },
    /**显示所有尺寸选择窗口 */
    showMoreSize() {
        // 先隐藏人形轮廓框和底部按钮,否则会遮挡弹框
        this.setData({
            showSizesModal: true
        })

    },
    /**选择窗口确定事件 */
    onSelectedSize(e) {
        this.setData({
            showSizesModal: false
        });
        if (e.detail.confirm) {
            let size = this.selectComponent('#select-size').getSelectedSize();
            if (size != undefined) {
                this.setData({
                    selectedPhotoSize: size,
                })
            }
        }
    },

    /**从相册选择照片 */
    chooseImage() {
        let _this = this;
        wx.chooseMedia({
            count: 1,
            mediaType: ['image'],
            sourceType: ['album'],
            // sizeType: ['compressed'],
            success(res) {
                _this.setData({
                    sourceImg: res.tempFiles[0].tempFilePath,
                });
                _this.navgationToShow();
            }
        })
    },

    /**通过照相机拍照获取照片 */
    takePhoto() {
        let _this = this;
        const ctx = wx.createCameraContext();
        ctx.takePhoto({
            quality: "high",
            success: (res) => {
                _this.setData({
                    sourceImg: res.tempImagePath,
                    showCameraImg: true
                })
            },
        });
    },
    handleOpenShow() {
        const flag = !this.data.isShowSizeDetial;
        this.setData({
            isShowSizeDetial: flag
        })
    },
    /**camera错误回调函数 */
    error(e) {
        this.showError({title: e.detail,icon: 'error',duration: 2000,mask: true});
    },


    /**生成证件照后跳转页面 */
    navgationToShow(e) {
        if (!e || e.detail.confirm) {
            wx.setStorageSync("segmentImg", {
                img: this.data.sourceImg,
                size: this.data.selectedPhotoSize
            });
            wx.navigateTo({
                url: "/pages/photo/show/show",
            });
        }
    },
    closeMoreSizeWnd() {
        this.setData({
            showSizesModal: false
        })
    },
    /**初始化 控件尺寸及数据*/
    init() {
        // 初始化camera父view的高度
        const _this = this;
        wx.createSelectorQuery().select('#footer').boundingClientRect(function (rect) {
            const contentHeight = (_this.data.sys_info.windowHeight - _this.data.sys_navBar - rect.height);
            _this.setData({
                contentHeight: contentHeight
            });
        }).exec()
    },
    onLoad(options) {
        /**加载证件照尺寸数据 */
        this.loadSizeType();
        this.init();
    },
    onShow() {
        // 在显示界面返回后直接显示camera界面,隐藏上次的拍照结果
        this.setData({
            showCameraImg: false
        })
    }
})